#!/bin/bash

#-------------------------------------------------------------------
# icecc 调度器部署脚本
#
# 功能：
#   在一台服务器上部署 icecc 调度器（scheduler）
#   用于集中管理和调度所有编译节点
#
# 使用方法：
#   sudo ./setup-icecc-scheduler.sh
#
# 作者：NFServer Team
# 日期：2025-11-04
#-------------------------------------------------------------------

set -e

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

log_info() {
    echo -e "${GREEN}[INFO]${NC} $1"
}

log_warning() {
    echo -e "${YELLOW}[WARN]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

log_step() {
    echo -e "${BLUE}[STEP]${NC} $1"
}

# 从源码编译安装 icecc
install_from_source() {
    log_warning "从源码编译安装 icecc（需要较长时间）..."
    
    # 安装编译依赖
    log_info "安装编译依赖..."
    if [ "$OS_TYPE" = "centos" ]; then
        yum groupinstall -y "Development Tools"
        
        # 安装基础依赖
        yum install -y libcap-ng-devel lzo-devel libarchive-devel \
                       docbook2X libxslt wget
        
        # libzstd 在 CentOS 7 的 EPEL 中可能没有，尝试安装
        log_info "尝试安装 libzstd..."
        if yum list available libzstd-devel &>/dev/null; then
            yum install -y libzstd-devel
        elif yum list available zstd-devel &>/dev/null; then
            yum install -y zstd-devel
        else
            log_warning "⚠️ libzstd 不可用，将禁用 zstd 支持（不影响核心功能）"
        fi
        
    elif [ "$OS_TYPE" = "debian" ]; then
        apt-get update
        apt-get install -y build-essential cmake pkg-config \
                          libcap-ng-dev liblzo2-dev libarchive-dev libzstd-dev \
                          docbook2x libxslt1-dev wget curl
    fi
    
    # 下载源码
    local version="1.4.0"
    local tarball="icecc-${version}.tar.xz"
    
    log_info "下载 icecc ${version} 源码..."
    cd /tmp
    
    # 检查是否已有文件
    if [ -f "$tarball" ]; then
        log_info "发现已存在的文件: $tarball"
        if tar -tf "$tarball" &>/dev/null; then
            log_info "✅ 文件完整，跳过下载"
            return 0
        else
            log_warning "文件已损坏，重新下载..."
            rm -f "$tarball"
        fi
    fi
    
    # 多个下载源（GitHub + 国内镜像）
    # 注意：文件名是 icecc-1.4.0.tar.xz（不是 icecream）
    local urls=(
        "https://mirror.ghproxy.com/https://github.com/icecc/icecream/releases/download/1.4/${tarball}"
        "https://ghproxy.net/https://github.com/icecc/icecream/releases/download/1.4/${tarball}"
        "https://gh.api.99988866.xyz/https://github.com/icecc/icecream/releases/download/1.4/${tarball}"
        "https://github.com/icecc/icecream/releases/download/1.4/${tarball}"
    )
    
    local download_success=false
    
    # 验证下载的文件
    validate_download() {
        local file="$1"
        local min_size=102400  # 100KB，icecream 应该至少 500KB
        
        # 检查文件是否存在
        if [ ! -f "$file" ]; then
            return 1
        fi
        
        # 检查文件大小
        local file_size=$(stat -f%z "$file" 2>/dev/null || stat -c%s "$file" 2>/dev/null || echo 0)
        if [ "$file_size" -lt "$min_size" ]; then
            log_warning "文件太小 (${file_size} 字节)，应该至少 500KB"
            return 1
        fi
        
        # 检查文件类型
        if ! file "$file" | grep -q "XZ compressed"; then
            log_warning "文件格式不正确，不是 XZ 压缩文件"
            return 1
        fi
        
        # 尝试验证 tar 结构
        if ! tar -tf "$file" &>/dev/null; then
            log_warning "tar 文件结构验证失败"
            return 1
        fi
        
        return 0
    }
    
    # 尝试使用 wget 下载
    if command -v wget &> /dev/null; then
        for url in "${urls[@]}"; do
            log_info "尝试 wget 下载: ${url}"
            if wget --no-check-certificate --timeout=60 --tries=2 "$url" -O "$tarball" 2>&1 | grep -v "^$"; then
                if validate_download "$tarball"; then
                    local size=$(stat -f%z "$tarball" 2>/dev/null || stat -c%s "$tarball" 2>/dev/null)
                    log_info "✅ 下载成功 ($(echo "scale=2; $size/1024" | bc) KB)"
                    download_success=true
                    break
                else
                    log_warning "下载的文件无效，尝试下一个源..."
                    rm -f "$tarball"
                fi
            else
                log_warning "wget 下载失败，尝试下一个源..."
                rm -f "$tarball"
            fi
        done
    fi
    
    # 如果 wget 失败，尝试使用 curl
    if [ "$download_success" = false ] && command -v curl &> /dev/null; then
        log_info "wget 失败，尝试使用 curl..."
        for url in "${urls[@]}"; do
            log_info "尝试 curl 下载: ${url}"
            if curl -k -L --connect-timeout 60 --max-time 180 --progress-bar -o "$tarball" "$url"; then
                if validate_download "$tarball"; then
                    local size=$(stat -f%z "$tarball" 2>/dev/null || stat -c%s "$tarball" 2>/dev/null)
                    log_info "✅ 下载成功 ($(echo "scale=2; $size/1024" | bc) KB)"
                    download_success=true
                    break
                else
                    log_warning "下载的文件无效，尝试下一个源..."
                    rm -f "$tarball"
                fi
            else
                log_warning "curl 下载失败，尝试下一个源..."
                rm -f "$tarball"
            fi
        done
    fi
    
    if [ "$download_success" = false ]; then
        log_error "所有下载源均失败"
        echo ""
        echo "请手动下载并安装："
        echo ""
        echo "1. 下载源码（选择以下任一地址）："
        echo "   • GitHub: https://github.com/icecc/icecream/releases/download/1.4/${tarball}"
        echo "   • 镜像1: https://mirror.ghproxy.com/https://github.com/icecc/icecream/releases/download/1.4/${tarball}"
        echo "   • 镜像2: https://ghproxy.net/https://github.com/icecc/icecream/releases/download/1.4/${tarball}"
        echo ""
        echo "2. 上传到服务器 /tmp 目录"
        echo ""
        echo "3. 运行以下命令："
        echo "   cd /tmp"
        echo "   tar -xf ${tarball}"
        echo "   cd icecc-${version}"
        echo "   ./configure --prefix=/usr --sysconfdir=/etc"
        echo "   make -j\$(nproc)"
        echo "   sudo make install"
        echo ""
        exit 1
    fi
    
    # 解压并编译
    log_info "解压并编译..."
    tar -xf "$tarball"
    cd "icecc-${version}"
    
    # 检查是否有 libzstd
    local configure_opts="--prefix=/usr --sysconfdir=/etc"
    if ! pkg-config --exists libzstd 2>/dev/null; then
        log_warning "libzstd 不可用，禁用 zstd 支持"
        configure_opts="$configure_opts --without-man"
    fi
    
    log_info "配置编译选项: $configure_opts"
    ./configure $configure_opts
    
    log_info "开始编译（需要 5-10 分钟）..."
    make -j$(nproc)
    
    log_info "安装到系统..."
    make install
    
    # 清理
    cd /
    rm -rf "/tmp/icecc-${version}" "/tmp/${tarball}"
    
    log_info "✅ icecc 从源码安装完成"
}

# 检查是否为 root 用户
if [ "$EUID" -ne 0 ]; then 
    log_error "请使用 root 权限运行此脚本：sudo $0"
    exit 1
fi

# 获取脚本所在目录
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"

# 加载配置
DISTCC_CONF="${SCRIPT_DIR}/distcc.conf"
if [ -f "$DISTCC_CONF" ]; then
    source "$DISTCC_CONF"
else
    log_warning "未找到 distcc.conf，使用默认配置"
    ICECC_SCHEDULER_HOST="0.0.0.0:8765"
    ICECC_NETNAME="nfshm-build"
fi

# 提取端口
SCHEDULER_PORT=$(echo "$ICECC_SCHEDULER_HOST" | cut -d':' -f2)
SCHEDULER_PORT=${SCHEDULER_PORT:-8765}

log_step "🚀 开始部署 icecc 调度器..."
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"

# 1. 检测操作系统
log_step "1️⃣ 检测操作系统..."
if [ -f /etc/redhat-release ]; then
    OS_TYPE="centos"
    log_info "检测到 CentOS/RHEL 系统"
elif [ -f /etc/debian_version ]; then
    OS_TYPE="debian"
    log_info "检测到 Debian/Ubuntu 系统"
else
    log_error "不支持的操作系统"
    exit 1
fi

# 2. 安装 icecc
log_step "2️⃣ 安装 icecc 和调度器..."

# 强制版本检查函数
check_icecc_version() {
    local required_version="1.4"
    local current_version=""
    
    # 检查是否已安装
    if ! command -v icecc &> /dev/null || ! command -v icecc-scheduler &> /dev/null; then
        return 1  # 未安装
    fi
    
    # 获取当前版本
    # icecc-scheduler 不支持 --version，但会在 -h 或错误输出中显示版本
    # 输出格式: "ICECREAM scheduler 1.4.0"
    current_version=$(icecc-scheduler -h 2>&1 | grep -i "ICECREAM scheduler" | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1)
    
    # 如果上面的方法失败，尝试使用 icecc 命令获取版本
    if [ -z "$current_version" ]; then
        current_version=$(icecc --version 2>&1 | grep -i "ICECC" | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1)
    fi
    
    if [ -z "$current_version" ]; then
        log_warning "⚠️ 无法获取 icecc 版本，将重新安装"
        return 1
    fi
    
    # 提取主版本号和次版本号 (从 1.4.0 提取 1.4)
    local version_short=$(echo "$current_version" | grep -oE '[0-9]+\.[0-9]+' | head -1)
    log_info "当前 icecc-scheduler 版本: $current_version"
    
    # 检查主版本号和次版本号
    local current_major=$(echo "$version_short" | cut -d'.' -f1)
    local current_minor=$(echo "$version_short" | cut -d'.' -f2)
    local required_major=$(echo "$required_version" | cut -d'.' -f1)
    local required_minor=$(echo "$required_version" | cut -d'.' -f2)
    
    if [ "$current_major" -eq "$required_major" ] && [ "$current_minor" -eq "$required_minor" ]; then
        log_info "✅ icecc 版本正确 ($version_short)"
        return 0  # 版本正确
    else
        log_error "❌ icecc 版本不匹配！"
        log_error "   当前版本: $version_short"
        log_error "   要求版本: $required_version.x"
        log_error "   版本不一致会导致调度器和节点无法连接"
        echo ""
        log_warning "⚠️ 将强制重新安装 icecc 1.4.0..."
        echo ""
        return 1  # 版本不匹配
    fi
}

# 检查版本
if check_icecc_version; then
    log_info "✅ icecc 1.4 已安装，跳过安装步骤"
else
    # CentOS 7 的 EPEL 仓库 icecc 版本过老（通常是 0.9.x 或 1.0.x）
    # 为了避免版本不匹配问题，强制从源码安装 1.4.0
    log_warning "⚠️ 为确保版本一致性，将从源码编译安装 icecc 1.4.0"
    log_info "   原因：CentOS EPEL 仓库的 icecc 版本通常过老（< 1.4）"
    echo ""
    
    # 如果已安装旧版本，先卸载
    if command -v icecc &> /dev/null; then
        log_info "检测到已安装的 icecc，先卸载旧版本..."
        if [ "$OS_TYPE" = "centos" ]; then
            yum remove -y icecream icecream-scheduler 2>/dev/null || true
        elif [ "$OS_TYPE" = "debian" ]; then
            apt-get remove -y icecc 2>/dev/null || true
        fi
    fi
    
    # 强制从源码安装 1.4.0
    install_from_source
    
    # 验证安装的版本
    if command -v icecc-scheduler &> /dev/null; then
        # icecc-scheduler 不支持 --version，使用 -h 获取版本信息
        installed_version=$(icecc-scheduler -h 2>&1 | grep -i "ICECREAM scheduler" | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1)
        
        if [ -z "$installed_version" ]; then
            log_warning "⚠️ 无法获取版本号，但命令可用"
            installed_version="unknown"
        else
            log_info "✅ 安装完成，版本: $installed_version"
            
            if ! echo "$installed_version" | grep -q "^1\.4"; then
                log_error "❌ 安装的版本不是 1.4.x: $installed_version"
                log_error "   这不应该发生，请检查 install_from_source 函数"
                exit 1
            fi
        fi
    else
        log_error "❌ icecc-scheduler 命令不可用"
        exit 1
    fi
fi

# 检查并创建 systemd 服务文件（无论是否重新安装都需要检查）
log_step "2.5️⃣ 检查 systemd 服务文件..."

# 确定服务文件路径
if [ -d /usr/lib/systemd/system ]; then
    SERVICE_FILE="/usr/lib/systemd/system/icecc-scheduler.service"
elif [ -d /lib/systemd/system ]; then
    SERVICE_FILE="/lib/systemd/system/icecc-scheduler.service"
else
    log_error "❌ 找不到 systemd 目录"
    exit 1
fi

# 检查服务文件是否存在
if [ -f "$SERVICE_FILE" ]; then
    log_info "✅ systemd 服务文件已存在: $SERVICE_FILE"
else
    log_warning "⚠️ systemd 服务文件不存在，正在创建..."
    
    # 创建服务文件（根据系统类型选择配置文件路径）
    if [ "$OS_TYPE" = "centos" ]; then
        ENV_FILE="/etc/sysconfig/icecc"
    else
        # Debian/Ubuntu 也使用 /etc/sysconfig/icecc 以保持一致性
        mkdir -p /etc/sysconfig
        ENV_FILE="/etc/sysconfig/icecc"
    fi
    
    cat > "$SERVICE_FILE" << SERVICEEOF
[Unit]
Description=Icecream distributed compiler scheduler
After=network.target

[Service]
Type=simple
User=icecc
Group=icecc
EnvironmentFile=${ENV_FILE}
ExecStart=/usr/sbin/icecc-scheduler -n \${ICECC_NETNAME} -p \${ICECC_SCHEDULER_PORT} -v
StandardOutput=journal
StandardError=journal
SyslogIdentifier=icecc-scheduler
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
SERVICEEOF
    
    log_info "✅ systemd 服务文件已创建: $SERVICE_FILE"
fi

# 重新加载 systemd 配置
systemctl daemon-reload
log_info "✅ systemd 配置已重新加载"

# 3. 配置调度器
log_step "3️⃣ 配置 icecc 调度器..."

# 为保持一致性，所有系统都使用 /etc/sysconfig/icecc
CONFIG_FILE="/etc/sysconfig/icecc"
mkdir -p /etc/sysconfig

cat > "$CONFIG_FILE" << EOF
# icecc 调度器配置
# 由 setup-icecc-scheduler.sh 自动生成

# 调度器监听端口（仅供参考，实际使用下面拆分的变量）
ICECC_SCHEDULER_HOST=0.0.0.0:${SCHEDULER_PORT}

# 调度器端口（systemd 服务使用）
ICECC_SCHEDULER_PORT=${SCHEDULER_PORT}

# 网络名称（用于隔离不同的编译网络）
ICECC_NETNAME="${ICECC_NETNAME}"

# 调度器本身不执行编译任务
ICECC_MAX_JOBS=0

# 日志级别（info, debug, warning, error）
ICECC_LOG_LEVEL=info

# 日志文件
ICECC_LOGFILE=/var/log/icecc/scheduler.log
EOF

log_info "配置文件已创建：$CONFIG_FILE"

# 4. 创建日志和缓存目录
log_step "4️⃣ 创建日志和缓存目录..."

# 创建日志目录
mkdir -p /var/log/icecc

# 创建缓存目录（重要！）
mkdir -p /var/cache/icecream

# 检查 icecc 用户是否存在
if ! id -u icecc &>/dev/null; then
    log_warning "icecc 用户不存在，创建用户..."
    useradd -r -s /sbin/nologin -d /var/cache/icecream -c "Icecream distributed compiler" icecc 2>/dev/null || true
fi

# 设置目录权限
chown -R icecc:icecc /var/log/icecc 2>/dev/null || true
chown -R icecc:icecc /var/cache/icecream 2>/dev/null || true
chmod 755 /var/cache/icecream

log_info "✅ 目录权限已设置"
log_info "  日志目录: /var/log/icecc"
log_info "  缓存目录: /var/cache/icecream"

# 5. 配置防火墙
log_step "5️⃣ 配置防火墙..."

# 检查 firewalld
if command -v firewall-cmd &> /dev/null; then
    if systemctl is-active --quiet firewalld; then
        log_info "开放 icecc 调度器端口：${SCHEDULER_PORT}"
        firewall-cmd --permanent --add-port=${SCHEDULER_PORT}/tcp
        firewall-cmd --reload
        log_info "✅ firewalld 规则已添加"
    else
        log_warning "⚠️ firewalld 未运行"
        echo ""
        echo "  选项 1：启动 firewalld"
        echo "    sudo systemctl start firewalld"
        echo "    sudo systemctl enable firewalld"
        echo "    sudo firewall-cmd --permanent --add-port=${SCHEDULER_PORT}/tcp"
        echo "    sudo firewall-cmd --reload"
        echo ""
        echo "  选项 2：使用 iptables"
        echo "    sudo iptables -A INPUT -p tcp --dport ${SCHEDULER_PORT} -j ACCEPT"
        echo "    sudo service iptables save  # CentOS 6"
        echo "    或"
        echo "    sudo iptables-save > /etc/sysconfig/iptables  # CentOS 7+"
        echo ""
        echo "  选项 3：云服务器安全组（推荐）"
        echo "    在云服务商控制台配置安全组，开放端口 ${SCHEDULER_PORT}"
        echo ""
    fi
elif command -v iptables &> /dev/null; then
    log_info "使用 iptables 配置防火墙..."
    if iptables -L -n | grep -q "${SCHEDULER_PORT}"; then
        log_info "✅ 端口 ${SCHEDULER_PORT} 已开放"
    else
        iptables -A INPUT -p tcp --dport ${SCHEDULER_PORT} -j ACCEPT
        # 尝试保存规则
        if [ -f /etc/sysconfig/iptables ]; then
            iptables-save > /etc/sysconfig/iptables
            log_info "✅ iptables 规则已保存"
        else
            log_warning "⚠️ 无法保存 iptables 规则，重启后失效"
            log_info "手动保存: sudo iptables-save > /etc/sysconfig/iptables"
        fi
    fi
else
    log_warning "⚠️ 未检测到防火墙工具"
    echo ""
    echo "  请手动配置防火墙，开放端口：${SCHEDULER_PORT}/tcp"
    echo ""
    echo "  如果使用云服务器，请在控制台配置安全组："
    echo "    • 阿里云：ECS 控制台 → 安全组 → 入方向规则"
    echo "    • 腾讯云：CVM 控制台 → 安全组 → 入站规则"
    echo "    • AWS：EC2 控制台 → Security Groups → Inbound Rules"
    echo ""
fi

# 6. 修复 systemd 服务配置
log_step "6️⃣ 修复 systemd 服务配置..."

# 检查服务文件是否使用 wrapper（可能导致日志缺失）
if grep -q "icecc-scheduler-wrapper" /usr/lib/systemd/system/icecc-scheduler.service 2>/dev/null || \
   grep -q "icecc-scheduler-wrapper" /lib/systemd/system/icecc-scheduler.service 2>/dev/null; then
    log_warning "检测到使用 wrapper 脚本，修复为直接调用 icecc-scheduler..."
    
    # 确定服务文件路径
    if [ -f /usr/lib/systemd/system/icecc-scheduler.service ]; then
        SERVICE_FILE="/usr/lib/systemd/system/icecc-scheduler.service"
    elif [ -f /lib/systemd/system/icecc-scheduler.service ]; then
        SERVICE_FILE="/lib/systemd/system/icecc-scheduler.service"
    else
        SERVICE_FILE="/usr/lib/systemd/system/icecc-scheduler.service"
    fi
    
    # 备份原服务文件
    cp "$SERVICE_FILE" "${SERVICE_FILE}.bak" 2>/dev/null || true
    
    # 创建正确的服务文件
    cat > "$SERVICE_FILE" << 'SERVICEEOF'
[Unit]
Description=Icecream distributed compiler scheduler
After=network.target

[Service]
Type=simple
User=icecc
Group=icecc
EnvironmentFile=/etc/sysconfig/icecc
ExecStart=/usr/sbin/icecc-scheduler -n ${ICECC_NETNAME} -p ${ICECC_SCHEDULER_PORT} -v
StandardOutput=journal
StandardError=journal
SyslogIdentifier=icecc-scheduler
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
SERVICEEOF
    
    log_info "✅ systemd 服务文件已修复"
    
    # 重新加载 systemd 配置
    systemctl daemon-reload
    log_info "✅ systemd 配置已重新加载"
else
    log_info "✅ systemd 服务配置正常"
fi

# 7. 启动调度器
log_step "7️⃣ 启动 icecc 调度器..."

# 检查服务是否已运行
if systemctl is-active --quiet icecc-scheduler; then
    log_info "icecc-scheduler 服务已运行，重启服务..."
    systemctl restart icecc-scheduler
else
    log_info "启动 icecc-scheduler 服务..."
    systemctl enable icecc-scheduler
    systemctl start icecc-scheduler
fi

# 等待服务启动
sleep 3

# 8. 验证调度器状态
log_step "8️⃣ 验证调度器状态..."
if systemctl is-active --quiet icecc-scheduler; then
    log_info "✅ icecc 调度器服务已启动"
else
    log_error "❌ icecc 调度器服务启动失败"
    systemctl status icecc-scheduler
    exit 1
fi

# 检查端口监听
if netstat -tuln 2>/dev/null | grep -q ":${SCHEDULER_PORT}"; then
    log_info "✅ 调度器正在监听端口 ${SCHEDULER_PORT}"
elif ss -tuln 2>/dev/null | grep -q ":${SCHEDULER_PORT}"; then
    log_info "✅ 调度器正在监听端口 ${SCHEDULER_PORT}"
else
    log_warning "⚠️ 未检测到端口监听，请检查服务日志"
fi

# 验证调度器日志输出
log_info "检查调度器日志输出..."
if journalctl -u icecc-scheduler -n 5 --no-pager 2>/dev/null | grep -q "ICECREAM scheduler"; then
    log_info "✅ 调度器日志正常输出"
elif journalctl -u icecc-scheduler -n 5 --no-pager 2>/dev/null | grep -q "listening on port"; then
    log_info "✅ 调度器日志正常输出"
else
    log_warning "⚠️ 调度器日志输出异常，但服务正在运行"
    log_info "最近的日志："
    journalctl -u icecc-scheduler -n 5 --no-pager 2>/dev/null || true
fi

# 9. 验证配置一致性
log_step "9️⃣ 验证配置一致性..."

# 检查配置文件中的变量
log_info "检查配置文件..."
if [ -f "$CONFIG_FILE" ]; then
    source "$CONFIG_FILE"
    
    # 验证端口配置
    if [ -n "$ICECC_SCHEDULER_PORT" ]; then
        if [ "$ICECC_SCHEDULER_PORT" != "$SCHEDULER_PORT" ]; then
            log_error "❌ 端口配置不一致！"
            log_error "   脚本使用: $SCHEDULER_PORT"
            log_error "   配置文件: $ICECC_SCHEDULER_PORT"
        else
            log_info "✅ 端口配置一致: ${SCHEDULER_PORT}"
        fi
    fi
    
    # 验证网络名称
    if [ -n "$ICECC_NETNAME" ]; then
        log_info "✅ 网络名称: ${ICECC_NETNAME}"
    else
        log_error "❌ 网络名称未配置"
    fi
else
    log_error "❌ 配置文件不存在: $CONFIG_FILE"
fi

# 获取服务器所有 IP 地址用于节点配置参考
log_info "检测服务器 IP 地址..."
INTERNAL_IPS=($(ip -4 addr show | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | grep -v "127.0.0.1"))
if command -v curl &> /dev/null; then
    EXTERNAL_IP=$(curl -s -4 --max-time 5 ifconfig.me 2>/dev/null || echo "")
fi

# 10. 显示服务器信息
log_step "🎉 调度器信息..."
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo -e "${GREEN}✅ icecc 调度器部署完成！${NC}"
echo ""
echo "📊 调度器信息："
echo "  ├─ 监听地址：0.0.0.0:${SCHEDULER_PORT}"
echo "  ├─ 网络名称：${ICECC_NETNAME}"
echo "  ├─ 配置文件：${CONFIG_FILE}"
echo "  └─ 日志文件：/var/log/icecc/scheduler.log"
echo ""
echo "📝 服务器 IP 地址（供节点和客户端连接）："
if [ ${#INTERNAL_IPS[@]} -gt 0 ]; then
    echo "  ├─ 内网 IP（推荐使用，速度快）："
    for ip in "${INTERNAL_IPS[@]}"; do
        echo "  │   - ${ip}:${SCHEDULER_PORT}"
    done
fi
if [ -n "$EXTERNAL_IP" ]; then
    echo "  └─ 外网 IP（跨地域使用）：${EXTERNAL_IP}:${SCHEDULER_PORT}"
else
    echo "  └─ 外网 IP：无法获取"
fi
echo ""
echo "⚠️  重要提示："
echo "  ${YELLOW}所有节点（调度器、编译节点、客户端）必须使用相同版本的 icecc (1.4.x)${NC}"
echo "  版本不一致会导致连接失败！"
echo ""
echo "🔧 下一步操作："
echo "  1️⃣  配置编译节点："
if [ ${#INTERNAL_IPS[@]} -gt 0 ]; then
    echo "     ${GREEN}内网环境（推荐）：${NC}"
    echo "       sudo ./setup-icecc-node.sh ${INTERNAL_IPS[0]}:${SCHEDULER_PORT}"
fi
if [ -n "$EXTERNAL_IP" ]; then
    echo "     ${YELLOW}跨地域环境：${NC}"
    echo "       sudo ./setup-icecc-node.sh ${EXTERNAL_IP}:${SCHEDULER_PORT}"
fi
echo ""
echo "  2️⃣  修改客户端配置文件 ci/distcc.conf："
echo "     DISTCC_MODE=icecc"
if [ ${#INTERNAL_IPS[@]} -gt 0 ]; then
    echo "     ICECC_SCHEDULER_HOST=${INTERNAL_IPS[0]}:${SCHEDULER_PORT}  # 内网IP（推荐）"
fi
echo "     ICECC_NETNAME=${ICECC_NETNAME}"
echo ""
echo "  3️⃣  在客户端运行编译："
echo "     DISTCC_MODE=icecc make debug"
echo ""
echo "🔍 快速查看状态（推荐）："
echo "  cd /path/to/nfshm-xframe"
echo "  ./ci/icecc-status.sh scheduler"
echo ""
echo "🔍 手动查看状态："
echo "  systemctl status icecc-scheduler"
echo "  journalctl -u icecc-scheduler -f"
echo ""
echo "🔍 查看已连接的编译节点："
echo "  journalctl -u icecc-scheduler | grep 'connected'"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"

